package com.gitee.chessboard.jdbc.executor;

import com.gitee.chessboard.jdbc.JdbcManager;

import java.util.List;

/**
 * sql执行器的抽象实现
 *
 * @author 敲代码的旺财
 * @date 2021/11/19 16:28
 */
public abstract class AbstractSqlExecutor implements SqlExecutor {
    /**
     * jdbc的管理器
     */
    private JdbcManager jdbcManager;

    public AbstractSqlExecutor(JdbcManager jdbcManager) {
        this.jdbcManager = jdbcManager;
    }

    public JdbcManager getJdbcManager() {
        return jdbcManager;
    }

    public void setJdbcManager(JdbcManager jdbcManager) {
        this.jdbcManager = jdbcManager;
    }

    /**
     * 根据对象创建表
     *
     * @param object 需要创建表的对象
     */
    @Override
    public abstract void createTable(Object object);

    /**
     * 根据对象插入数据
     *
     * @param object 需要插入的对象
     */
    @Override
    public abstract void insert(Object object);

    /**
     * 根据对象插入数据或者更新数据
     *
     * @param object 需要插入的对象
     */
    @Override
    public abstract void insertOrUpdate(Object object);

    /**
     * 获取指定类型的所有对象
     *
     * @return 指定类型的所有对象
     */
    @Override
    public abstract <T> List<T> getAll(T obj);

    /**
     * 删除
     * @param obj
     * @param <T>
     * @return
     */
    @Override
    public abstract <T> int delete(T obj);
}
